<template>
  <!-- json导入模态框 -->
  <a-modal :visible="jsonVisible" @ok="handleOk" @cancel="close">
    <template #title>
      <a-row style="justify-content: center"><span>Json数据导入</span> </a-row>
    </template>
    <p><span class="xin">*</span>Json数据:</p>
    <div class="jsonbody">
      <a-textarea v-model:value="jsondata" :rows="13" placeholder="请录入json数据..." />
    </div>
  </a-modal>
</template>
<script lang="ts" setup>
  // import { message } from 'ant-design-vue';
  // import { isJSON } from '@/utils/op';
  // import { indexOf } from 'lodash';
  // const props =
  defineProps({
    jsonVisible: {
      type: Boolean,
      default: false,
    },
    jsontype: {
      type: Number,
      default: 1,
    },
  });
  const emits = defineEmits(['jsonvisible', 'jsondata']);
  const close = () => {
    //关闭
    emits('jsonvisible');
  };
  const handleOk = () => {
    //确认按钮回调
    //请求body(1)返回参数(2)
    // if (props.jsontype == 1) {
    //   // 第一个
    //   try {
    //     if (!isJSON(jsondata.value)) {
    //       message.error('JSON格式错误！！！');
    //       return;
    //     }
    //     let str = JSON.parse(jsondata.value);
    //     // console.log(props.jsontype);
    //     if (bodyjson(str.data)) {
    //       message.success('ok');
    //       emits('jsondata', JSON.parse(jsondata.value));
    //     } else {
    //       message.error('参数信息错误');
    //     }
    //   } catch (error) {
    //     message.error('参数信息异常');
    //   }
    // } else {
    //第二个
    //1.获取数据
    //2.数据转化为json格式
    let str = JSON.parse(jsondata.value);

    //3.数据处理 遍历数据 调用迭代器
    let temporary: any = [];
    for (const key in str) {
      let data = {
        icName: undefined, //参数名称
        icType: undefined, //数据类型
        icFill: 1,
        icDefault: '',
        icComment: '',
        children: [],
      }; //传入对应的键名 和键值
      // let data = null;
      // let data = undefined;
      // let data = { children: [] };
      datajson(key, str[key], data);
      temporary.push(data.children[0]);
      // temporary.push(data);
    }
    console.log('处理之后的数据', temporary);

    emits('jsondata', temporary);
    // }
  };
  //迭代器
  let i = 0;
  function datajson(obj: any, strs: any, datas: any) {
    // console.log(datas, typeof datas.children);
    let data = {
      icName: obj, //参数名称
      icType: typeof strs == 'number' ? 1 : typeof strs == 'object' ? 3 : 0, //数据类型
      icFill: 1,
      icDefault: '',
      icComment: '',
      children: [],
      key: i++,
    };

    if (datas != null) {
      datas.children.push(data);
    } else {
      console.log('能走进这里吗');
      datas = data;
    }
    //1.判断是否为 object 类型 或 list 类型
    if (strs instanceof Array) {
      //若为 Array 则执行
      for (let str in strs) {
        if (strs instanceof Object) {
          //迭代循环
          datajson('item', strs[str], datas.children[str]);
          break;
        } else break;
      }
    } else if (strs instanceof Object) {
      //若为 object 则执行
      for (let str in strs) {
        if (strs instanceof Object) datajson(str, strs[str], datas.children[0]);
      }
    }
    return datas;
  }

  //JSON数据导入
  const jsondata = ref<string>('');

  // function bodyjson(objarr: []): boolean {
  //   //传入对象数组
  //   let istrue = true;
  //   let typearr = [0, 1, 2, 3, 4];
  //   interface bodyform {
  //     icName: string; //参数名称
  //     icType: number; //数据类型
  //     icFill?: number;
  //     icDefault?: string;
  //     icComment?: string;
  //     children?: [];
  //   }
  //   let stack: bodyform[] = []; //栈

  //   if (objarr.length == 0) return false; //如果为空数组则返回

  //   if (!objarr.every((item: bodyform) => item.hasOwnProperty('icName') && item.hasOwnProperty('icType') && typearr.includes(item.icType))) {
  //     // message.error('请确认包含属性:name,type且type属性正确');
  //     return false;
  //   }

  //   objarr.forEach((item: bodyform) => {
  //     //将具有children的属性且数据不为空的数据添加入栈中
  //     if (item.children && item.children.length > 0) stack.push(item);
  //   });
  //   while (stack.length) {
  //     let _shift: any;
  //     _shift = stack.shift();
  //     if (_shift.hasOwnProperty('icName') && _shift.hasOwnProperty('icType') && typearr.includes(_shift.icType)) {
  //       if (_shift.children && _shift.children.length > 0) stack.push(..._shift.children); //有满足条件的子类再添加进栈中
  //       istrue = true;
  //     } else {
  //       // message.error('请确认包含属性:name,type且type属性正确');
  //       istrue = false;
  //       break;
  //     }
  //   }
  //   return istrue;
  // }
</script>
